const libtable = require('../../libs/table.js');

const table = 'banner_table';
// 准备请求banner时, 需要提交的字段信息, 用于显示, 需要提交哪些信息insert到数据库中
const fields = [
    { title: '标题', name: 'title', type: 'text' },
    { title: '图片', name: 'src',   type: 'file' },
    { title: '链接', name: 'href',  type: 'text' },
    { title: '序号', name: 'serial', type: 'number'}
]
// 页面归属
const page_type = 'banner';

let routes = libtable(fields, table, page_type);
module.exports = routes;



// const Router = require('koa-router');
// const router = new Router();
// const path = require('path');
// const common = require('../../libs/common');

// const table = 'banner_table';
// // 准备请求banner时, 需要提交的字段信息, 用于显示, 需要提交哪些信息insert到数据库中
// const fields = [
//     { title: '标题', name: 'title', type: 'text' },
//     { title: '图片', name: 'src',   type: 'file' },
//     { title: '链接', name: 'href',  type: 'text' },
//     { title: '序号', name: 'serial', type: 'number'}
// ]
// // 页面归属
// const page_type = 'banner';
// // 页面集合mapping
// const page_types = { 
//     'banner': 'banner管理', 
//     'catalog': '类目管理', 
//     'article': '文章管理' 
// }

// router.get('/', async ctx => {
//     let { HTTP_ROOT } = ctx.config;
//     let datas = await ctx.db.query(`select * from ${table}`);
//     await ctx.render('admin/table', {
//         HTTP_ROOT,                              // localhost:8080
//         page_type,
//         page_types,
//         datas,                                  // 数据库中的数据
//         fields                                  // 需要增加表单字段
//     })
// })

// // 处理提交数据(普通表单, 文件上传)
// // router.post('/', async ctx => {
// //     const { HTTP_ROOT } = ctx.config;
// //     // 1. 存储需要提交的表单字段, 根据定义的fields
// //     let keys = [];
// //     // 2. 存储表单的值(普通field和文件file) 使用数组就是方便遍历
// //     let vals = [];
// //     // 3. 遍历需要提交的表单字段
// //     fields.forEach(item => {
// //         const { name, type } = item;
// //         keys.push(name);
// //         if (type == 'file') {
// //             vals.push(path.basename(ctx.request.fields[name][0].path));
// //         } else {
// //             vals.push(ctx.request.fields[name]);
// //         }
// //     })
// //     // console.log(`insert into ${table} (${keys.join(',')}) 
// //     //     values(${keys.map(key => '?').join(',')})`);
// //     await ctx.db.query(`insert into ${table} (${keys.join(',')}) 
// //         values (${keys.map(key => '?').join(',')})`, vals);
// //     ctx.redirect(`${HTTP_ROOT}/admin/${page_type}`);
// // })

// // 根据配置的提交字段进行提交,达到可配置
// router.post('/', async ctx => {
//     let { HTTP_ROOT } = ctx.config;
//     let post = ctx.request.fields;
//     let keys = [];
//     let vals = [];
//     fields.forEach( ({ name, type }) => {
//         keys.push(name);
//         if (type == 'file') {
//             vals.push(path.basename(post[name][0].path));
//         } else {
//             vals.push(post[name]);
//         }
//     })
//     let sql = `insert into ${table} (${keys.join(',')}) values(${keys.map(key => '?')})`;
//     await ctx.db.query(sql, vals);
//     ctx.redirect(`${HTTP_ROOT}/admin/${page_type}`);
// })




// // 删除某一条记录(删除包含 删除上传文件 和 数据库记录(普通表单))
// router.get('/delete/:id', async ctx => {
//     let { id } = ctx.params;
//     // 获取上传目录(从config)
//     let { UPLOAD_DIR, HTTP_ROOT } = ctx.config;
//     // 从db中根据id获取记录的信息,然后删除记录和文件
//     let data = await ctx.db.query(`select * from ${table} where ID = ?`, [id]);
//     ctx.assert(data.length, 400, 'no data');
//     let row = data[0];
//     // 直接把fields中的每一项field 解构出 name和type属性
//     fields.forEach( async ({name, type}) => {
//         if (type == 'file') {
//             // 删除文件
//             await common.unlink(path.resolve(UPLOAD_DIR, row[name]));
//         }
//     })
//     await ctx.db.query(`delete from ${table} where id = ?`, [id]);
//     ctx.redirect(`${HTTP_ROOT}/admin/${page_type}`);
// })

// // 修改(点击修改按钮a链接,触发get请求, url=/banner/modify/:id),把id传递给router, router获取进行fn处理

// // router.get('/modify/:id', async ctx => {
// //     let { id } = ctx.params;
// //     let { HTTP_ROOT } = ctx.config;
// //     let data = await ctx.db.query(`select * from banner_table where ID = ?`, [id]);
// //     ctx.assert(data.length, 400, 'no data');
// //     let row = data[0];
// //     // 渲染table模板, 根据传递的参数,显示修改页面, 判断参数,显示与隐藏 
// //     await ctx.render('/admin/table', {
// //         HTTP_ROOT,
// //         // type: 'modify',             // 用于控制 显示 修改页面还是 显示页面
// //         old_data: row,              // 修改前的数据
// //         fields,
// //         action: `${HTTP_ROOT}/admin/banner/modify/${id}`
// //     })

// // })

// // 通过请求接口
// router.get(`/get/:id`, async ctx => {
//     let { id } = ctx.params;
//     let rows = await ctx.db.query(`select * from ${table} where id = ?`, [id]);
//     if (rows.length == 0) {
//         ctx.body = { err: 1, msg: 'no this data'};
//     } else {
//         ctx.body = { err: 0, msg: 'success', data: rows[0] };
//     }
// })



// router.post('/modify/:id', async ctx => {
//     // 1. 获取原来的数据
//     // 2. 获取需要更新的字段
//     // 3. 拼接sql
//     // 4. 判断需要更新字段的类型, 如果是file类型需要单独处理
//     let { id } = ctx.params;
//     let { HTTP_ROOT, UPLOAD_DIR } = ctx.config;
//     let data = await ctx.db.query(`select * from ${table} where id = ?`, [id]);
//     // 获取提交表单数据
//     let post = ctx.request.fields;
//     // 存储需要删除的附件路径
//     let filepaths = {};
//     // 获取表单元素是文件的文件名, 用于修改(上传新的附件)时, 把原来的附件删除, 附件可能是多个, 所以使用对象来存储
//     fields.forEach(({name, type}) => {
//         if (type == 'file') {
//             filepaths[name] = data[0][name];
//         }
//     });
//     // 存储需要更新的字段名称和提交的值, 形成一个数组, 便于拼接sql
//     let keys = [];
//     let vals = [];
//     let file_change = {};
//     fields.forEach( async ({name, type}) => {
//         if (type == 'file') {
//             if (post[name] && post[name].length && post[name][0].size) {
//                 file_change[name] = true;
//                 keys.push(name);
//                 vals.push(path.basename(post[name][0].path));
//             }
//         } else {
//             keys.push(name);
//             vals.push(post[name]);
//         }
//     });
//     // 修改更新数据库
//     let sql = `update ${table} set ${keys.map(key => `${key} = ?`).join(',')} where id = ?`;
//     await ctx.db.query(sql, [...vals, id]);

//     console.log(filepaths);
//     // 修改删除原有的文件
//     fields.forEach(async ({ name, type }) => {
//         if (type == 'file' && file_change[name]) {
//             await common.unlink(path.resolve(UPLOAD_DIR, filepaths[name]));
//         }
//     })
//     ctx.redirect(`${HTTP_ROOT}/admin/${page_type}`);


// })

// // router.post('/modify/:id', async ctx => {
// //     let { UPLOAD_DIR, HTTP_ROOT } = ctx.config;
// //     // 获取表单元素
// //     let { id } = ctx.params;
// //     let data = await ctx.db.query(`select * from ${table} where ID = ?`, [id]);
// //     // 如果是文件,把文件的basename 的src获取到, 以及其他fields, update到数据库中
// //     let post = ctx.request.fields;
// //     let keys = ['title', 'href', 'serial'];
// //     let vals = [];
// //     // 获取post提交的字段的值
// //     keys.forEach(key => {
// //         vals.push(post[key]);
// //     })
// //     // 单独处理文件
// //     // 默认没有修改文件
// //     let src_change = false;
// //     if (post.src && post.src.length && post.src[0].size) {
// //         src_change = true;
// //     }
// //     // 如果上传了文件, 将需要更新的src字段添加到 需更新列表中
// //     if (src_change) {
// //         keys.push('src');
// //         vals.push(path.basename(post.src[0].path));
// //     }
// //     // 准备完成 需要update的字段
// //     await ctx.db.query(`update ${table} set 
// //         ${
// //             keys.map(key => (`${key} = ?`)).join(',')
// //         }
// //         where ID = ?
// //     `, [...vals, id]);
// //     // 更新完数据, 如果需要, 删除原来的上传文件
// //     if (src_change) {
// //         await common.unlink(path.resolve(UPLOAD_DIR, data[0].src));
// //     }
// //     ctx.redirect(`${HTTP_ROOT}/admin/banner`);
// // })

// module.exports = router.routes();